<?php

class Usuario_model extends CI_Model
{
    private $id;
    private $nome;
    private $email;
    private $senha;
    private $cpf;
    private $status;


    public function  __construct($id = null)
    {
	parent::__construct();


	if ($id != null)
	{
	    $query = $this->db->get_where('usuario', array('id_usuario' => $id));

	    if ($query->num_rows() == 1) {
		$tmp = $query->row();

		$this->set_id((int)$tmp->id_usuario);
		$this->set_nome($tmp->nome);
		$this->set_email($tmp->email);
		$this->set_senha($tmp->senha);
		$this->set_cpf($tmp->cpf);
		$this->set_status($tmp->status);
	    } else {
		exit('Erro. Não foi possível criar a classe Usuario_model');
	    }
	}
    }

    protected function create()
    {
	$dados = array( 'nome'	    => $this->get_nome(),
			'email'	    => $this->get_email(),
			'senha'	    => md5($this->get_senha()),
			'cpf'	    => $this->get_cpf(),
			'status'    => 1
		);

	$this->db->insert('usuario', $dados);
	$this->set_id($this->db->insert_id());
    }

    protected function delete()
    {
	$this->db->where('id_usuario', $this->get_id());
	$this->db->update('usuario', array('status' => 1));
    }

    public function autentica($email, $senha)
    {
	$query = $this->db->get_where('usuario', array('email' => $email, 'status' => 1));


	if ($query->num_rows() == 1)
	{
	    $tmp = $query->row();
	    @$senha_correta = $tmp->senha;

	    if ($senha_correta == $senha)
	    {
		$user_data = array(
			    'email' => $email,
			    'senha' => $senha_correta
		    );

		if ($this->session->userdata('email') == FALSE)
		{
		    $this->session->set_userdata($user_data);
		}		
		
		return TRUE;
	    }
	    
	    return FALSE;
	}

	return FALSE;
    }

    /**
     * Retorna o id do usuario buscando por email.
     *
     * @param string $email
     * @return int
     */
    public function get_id_by_email($email)
    {
	$query = $this->db->get_where('usuario', array('email' => $email));

	$tmp = $query->row();

	return $tmp->id_usuario;
    }


    public function tipo_de_usuario($id)
    {
	$query1 = $this->db->get_where('cliente', array('id_cliente_usuario' => $id));
	$query2 = $this->db->get_where('funcionario', array('id_funcionario_usuario' => $id));
	$query3 = $this->db->get_where('administrador', array('id_admin_usuario' => $id));

	if ($query1->num_rows() == 1)
	{
	    return 'cliente';
	}
	else if ($query2->num_rows() == 1)
	{
	    return 'funcionario';
	}
	else if ($query3->num_rows() == 1)
	{
	    return 'administrador';
	}
	
	return FALSE;
    }

    public function instancia_tipo_de_usuario($id)
    {
	require_once APPPATH . 'models/cliente_model.php';
	require_once APPPATH . 'models/funcionario_model.php';
	require_once APPPATH . 'models/administrador_model.php';

	switch($this->tipo_de_usuario($id))
	{
	    case 'cliente':
		return new Cliente_model($id);
		break;
	    case 'funcionario':
		return new Funcionario_model($id);
		break;
	    case 'administrador':
		return new Administrador_model($id);
		break;
	    default:
		return FALSE;
	}
    }

    public function get_id() {
	return $this->id;
    }

    public function set_id($x) {
	$this->id = $x;
    }

    public function get_nome() {
	return $this->nome;
    }

    public function set_nome($n) {
	$this->nome = $n;
    }

    public function get_email() {
	return $this->email;
    }

    public function set_email($e) {
	$this->email = $e;
    }

    public function get_cpf() {
	return $this->cpf;
    }

    public function set_cpf($c) {
	$this->cpf = $c;
    }

    public function get_status() {
	return (bool) $this->status;
    }

    public function set_status($s) {
	$this->status = (bool) $s;
    }

    public function get_senha() {
	return $this->senha;
    }

    public function set_senha($s) {
	$this->senha = $s;
    }
}